import setting from '@/config/setting';
import { util } from 'ele-admin-pro';

/**
 * 封装一些menu菜单处理的一些方法
 *
 * @author fengshuonan
 * @date 2021/4/21 21:44
 */
export class MenuUtil {
  /**
   * 将请求的菜单，转化成侧边菜单需要的结构
   *
   * @param  menus 菜单集合
   * @author fengshuonan
   * @date 2021/4/21 21:51
   */
  static parseSidebarMenu(menus) {
    if (!menus) {
      return [];
    }

    // 主页的路径
    let home;

    // 遍历每个菜单，增加一些meta属性
    menus = util.formatTreeData(menus, d => {

      // 如果需要转化menus参数的数据结构，则调用setting中配置的转化函数
      let item = setting.parseMenuItem ? setting.parseMenuItem(d) : Object.assign({}, d);

      // 定义每个menu的meta属性
      item.meta = Object.assign({
        title: item.title,
        icon: item.icon,
        hide: item.hide,
        active: item.active || item.uid,
        hideFooter: item.hideFooter,
        hideSidebar: item.hideSidebar
      }, item.meta);

      // 如果菜单没有子菜单
      if (!item.children || !item.children.length) {
        if (!home && item.path && !(
          item.path.startsWith('http://') ||
          item.path.startsWith('https://') ||
          item.path.startsWith('//')
        )) {
          home = item.path;
          if (!setting.homeTitle) {
            setting.homeTitle = item.title;
          }
        }
      }
      // 如果有子菜单，子菜单的第一项有path属性
      else if (item.children[0].path) {
        // 如果没有redirect值，则设置redirect值为path值
        if (!item.redirect) {
          item.redirect = item.children[0].path;
        }
        // 如果没有path值
        if (!item.path) {
          const cp = item.children[0].path;
          item.path = cp.substring(0, cp.lastIndexOf('/'));
        }
      }
      return item;
    });

    // 返回最后的菜单
    return { menus, home };
  }
}
